from django import forms

"""这段代码是 Django 表单的自定义渲染类，用于将 Django 表单的字段渲染成 Bootstrap 风格的 HTML 元素。
Bootstrap 是一个流行的前端框架，它提供了一套响应式的、移动设备优先的 CSS 样式。"""


class BootStrap:  # 这个类将被用来为表单字段添加 Bootstrap 样式
    bootstrap_exclude_fields = []  # 类变量，用于定义不需要应用 Bootstrap 样式的字段名称列表

    def __init__(self, *args, **kwargs):  # 类的初始化函数，它接受任意数量的位置参数和关键字参数
        super().__init__(*args, **kwargs)  #  调用父类的初始化函数，确保父类的初始化逻辑被执行
        # 循环ModelForm中的所有字段，给每个字段的插件设置
        for name, field in self.fields.items():  # 使用 self.fields.items() 获取表单字段的字典，并遍历每个字段
            if name in self.bootstrap_exclude_fields:  # 检查字段名称是否在排除列表
                continue  # 如果是，则跳过这个字段
            # 字段中有属性，保留原来的属性，没有属性，才增加。  widget.attrs 是一个字典
            if field.widget.attrs:  # 检查字段的 widget.attrs 是否已经存在属性
                # 存在属性
                # 则更新这个字典，添加或覆盖 "class" 和 "placeholder" 键
                field.widget.attrs["class "] = "form-control"
                field.widget.attrs["placeholder"] = field.label
            else:  # 不存在属性
                field.widget.attrs = {  # 创建一个新的字典
                    "class": "form-control",  # 设置 "class" 为 "form-control"
                    "placeholder": field.label  # "placeholder" 为字段的标签（field.label）
                }


class BootStrapModelForm(BootStrap, forms.ModelForm):
    # 定义了一个名为 BootStrapModelForm 的类，它继承自 BootStrap 和 Django 的 ModelForm
    # ModelForm 是 Django 用于自动生成表单字段的类，基于模型字段
    pass


class BootStrapForm(BootStrap, forms.Form):
    # 定义了一个名为 BootStrapForm 的类，它继承自 BootStrap 和 Django 的 Form。
    # Form 是 Django 用于创建不与数据库模型直接关联的表单的类
    pass

# 这段代码创建了两个自定义的表单类，BootStrapModelForm 和 BootStrapForm，它们会自动为表单字段添加 Bootstrap 样式，
# 使得表单在网页上呈现更加美观和一致。这样做可以减少在模板中手动添加样式的工作量。
